/**
 * 
 */
package cl.duocap.refaxion.view.bean;

import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;



import cl.duocap.refaxion.dto.TallerDTO;
import cl.duocap.refaxion.dto.TipoUsuarioDTO;
import cl.duocap.refaxion.dto.UsuarioDTO;
import cl.duocap.refaxion.servicios.TallerService;
import cl.duocap.refaxion.servicios.UsuarioService;
import cl.duocap.refaxion.arquitectura.Jsf2Util;

/**
 * @author rentonx
 *
 */
@ManagedBean(name = "formUsuarioEditarBean")
@SessionScoped
public class FormUsuarioEditarBean implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private List<TipoUsuarioDTO> listaTiposUsuario;
	private UsuarioDTO usuarioEditado;	
	private TipoUsuarioDTO tipoUsuario;
	private String idUsuarioPorEditar;
	private int idUsuarioEditar;
	@ManagedProperty("#{jsf2Util}")
	private Jsf2Util jsf2Util;
	//map para guardar la lista de tipo de dato
	private Map<String, Integer> listaTipoUs;
	private List<TallerDTO> obtenerListaTaller;
	private Map<String , Integer> listaTaller;
	
	
	@PostConstruct
	public void iniciar(){
		if (FacesContext.getCurrentInstance().isPostback()) {

			return;
		}

		UsuarioService listaTipoUsuarioEdicion = new UsuarioService();
		setListaTiposUsuario(listaTipoUsuarioEdicion.listarTipoUsuario());
		
		//Codigo que para enviar la lista de tipo de usuarios como par de datos 
		listaTipoUs = new LinkedHashMap<String, Integer>();
		for (TipoUsuarioDTO t: listaTiposUsuario) {
			listaTipoUs.put(t.getTipoUsuarioDescripcion(), t.getIdTipoUsuario());
			
		}
		////////////////////////////////////////////////////////////////////////
		TallerService taller = new TallerService();
		setObtenerListaTaller(taller.obtenerTalleres());
		
		//Codigo que para enviar la lista de tipo de usuarios como par de datos 
		listaTaller = new LinkedHashMap<String, Integer>();
		for (TallerDTO t: obtenerListaTaller) {
			listaTaller.put(t.getTallerDescripcion(), t.getIdTaller());
			
		}
		cargarUsuarioEditar();
	}
	
	public String listarTipoUsuario(){
		
		UsuarioService listaU = new UsuarioService();
		setListaTiposUsuario(listaU.listarTipoUsuario());
		return "formUsuarioEditar.xhtml?faces-redirect=true";
		
	}
	
	public void cargarUsuarioEditar(){
		idUsuarioEditar = Integer.parseInt(jsf2Util.getParameter("idUsuario"));
		UsuarioService usuario = new UsuarioService();
		setUsuarioEditado(usuario.cargarUsuarioEditar(idUsuarioEditar));
	}
	
	
	public String editarUsuario(){

		SimpleDateFormat dateformatJava = new SimpleDateFormat("dd-MM-yyyy");
		usuarioEditado.setFechaIngreso(dateformatJava.format(new Date()));
		UsuarioService usuario = new UsuarioService();
		usuarioEditado.setIdTipoUsuario(usuarioEditado.getTipoUsuarioDto().getIdTipoUsuario());
		if(usuario.editarUsuario(usuarioEditado)){
			return "mainUsuario.xhtml?faces-redirect=true";
			
		}else{
			return "formUsuarioEditar.xhtml?faces-redirect=true";
		}
	}
		
	 public void editListener() { 
		        FacesContext context = FacesContext.getCurrentInstance();  		        
		        context.addMessage(null, new FacesMessage("Informacion", "La informacion del usuario se modifico con exito."));
	 } 
	
	

	public FormUsuarioEditarBean() {
	
	}

	public List<TipoUsuarioDTO> getListaTiposUsuario() {
		return listaTiposUsuario;
	}

	public void setListaTiposUsuario(List<TipoUsuarioDTO> listaTiposUsuario) {
		this.listaTiposUsuario = listaTiposUsuario;
	}

	public UsuarioDTO getUsuarioEditado() {
		return usuarioEditado;
	}

	public void setUsuarioEditado(UsuarioDTO usuarioEditado) {
		this.usuarioEditado = usuarioEditado;
	}

	public TipoUsuarioDTO getTipoUsuario() {
		return tipoUsuario;
	}

	public void setTipoUsuario(TipoUsuarioDTO tipoUsuario) {
		this.tipoUsuario = tipoUsuario;
	}

	public int getIdUsuarioEditar() {
		return idUsuarioEditar;
	}

	public void setIdUsuarioEditar(int idUsuarioEditar) {
		this.idUsuarioEditar = idUsuarioEditar;
	}

	public String getIdUsuarioPorEditar() {
		return idUsuarioPorEditar;
	}

	public void setIdUsuarioPorEditar(String idUsuarioPorEditar) {
		this.idUsuarioPorEditar = idUsuarioPorEditar;
	}

	public Jsf2Util getJsf2Util() {
		return jsf2Util;
	}

	public void setJsf2Util(Jsf2Util jsf2Util) {
		this.jsf2Util = jsf2Util;
	}

	public Map<String, Integer> getListaTipoUs() {
		return listaTipoUs;
	}

	public void setListaTipoUs(Map<String, Integer> listaTipoUs) {
		this.listaTipoUs = listaTipoUs;
	}

	public List<TallerDTO> getObtenerListaTaller() {
		return obtenerListaTaller;
	}

	public void setObtenerListaTaller(List<TallerDTO> obtenerListaTaller) {
		this.obtenerListaTaller = obtenerListaTaller;
	}

	public Map<String , Integer> getListaTaller() {
		return listaTaller;
	}

	public void setListaTaller(Map<String , Integer> listaTaller) {
		this.listaTaller = listaTaller;
	}

}
